package com.atguigu.java;

import org.junit.Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * jdk 8之前的日期时间的API测试
 * 1.System 类中currentTimeMillis();
 * 2.java.util.Date和子类java.sql.Date
 * 3.SimpleDateFormat
 * 4.Calendar
 */
public class DateTimeTest {
    /*
    SimpleDateformat的使用：SimpleDateformat对日期Date类的格式化和解析

    1.两个操作：
    1.1格式化：日期 ---> 字符串
    1.2解析：格式化的逆过程：字符串 ----> 日期

    2.SimpleDateFormat的实例化
     */

    @Test
    public void testSimpleDateFormat() throws ParseException {
        //实例化SimpleDateFormat：使用默认的构造器
        SimpleDateFormat sdf = new SimpleDateFormat();

        //格式化
        Date date = new Date();
        System.out.println(date);

        String format = sdf.format(date);
        System.out.println(format);

        //解析：格式化的逆过程，字符串 ---> 日期
        String str = "22-09-06 下午21:30";
        Date date1 = sdf.parse(str);
        System.out.println(date1);

        //按照指定的方式格式化和解析：调用带参的构造器
//        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa");
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        //格式化
        String date2 = sdf1.format(date);
        System.out.println(date2);//2022-09-06 09:42:05
        //解析：要求字符串必须符合SimpleDateFormat的格式（通过构造器的参数体现）
        //否则抛异常
        Date date3 = sdf1.parse("2022-09-06 09:42:05");
        System.out.println(date3);
    }

    /*
    练习一：字符串“2022-09-08”转换为Date

    练习二：“三天打渔两天晒网” 1990-01-01
    举例：2020-09-08？总天数
    总天数 % 5 == 1,2,3 打渔
    总天数 % 5 == 4,0 晒网

    总天数的计算？
    方式一：(date1.getTime() - date.getTime()) / (1000 * 60 * 60 * 24) + 1
    方式二：1990-01-01 ---> 2019-12-31 + 2020-01-01 ---> 2020-09-08
     */
    @Test
    public void test2() throws ParseException {
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
        String date = "2022-09-08";
        Date date1 = sdf2.parse(date);
//        System.out.println(date1);
        java.sql.Date date2 = new java.sql.Date(date1.getTime());
        System.out.println(date2);
    }

    @Test
    public void practic2() throws ParseException {
//        ThreeAndTwo Date = new ThreeAndTwo("1990-01-01","2020-09-08");
//        Date.SanEr();

        String date1 = "1990-01-01";

        String date2 = "2020-09-08";


        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date11 =  sdf.parse(date1);

        Date date22 = sdf.parse(date2);


        long day = (date22.getTime() - date11.getTime())/ (1000 * 60 * 60 * 24) + 1;
        if (day % 5 == 1 || day % 5 == 2 || day % 5 == 3) {
            System.out.println("打渔");
        }else{
            System.out.println("晒网");
        }


    }
    /*
    Calendar日历类(抽象类)的使用

    */
    @Test
    public void CalenderTest(){
        //1.实例化
        //方式一：创建其子类（GregorianCalender）的对象
        //方式二：调用其静态方法getInstance()
        Calendar calendar = Calendar.getInstance();
//        System.out.println(calendar.getClass());//class java.util.GregorianCalendar

        //常用方法
        //get()
        int days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));

        //set()
        //calendar可变性
        calendar.set(Calendar.DAY_OF_MONTH,22);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);

        //add()  如果要减相应的天数，要输入负数
        calendar.add(Calendar.DAY_OF_MONTH,3);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);

        //getTime():日历类 ---> Date
        Date date = calendar.getTime();
        System.out.println(date);

        //setTime():Date ---> 日历类
        Date date1 = new Date();
        calendar.setTime(date1);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);
    }
}
